/**
 * 
 */
package server.container;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.log4j.Logger;

import server.db.SQL;

/**
 * @author Christian
 * 
 */
public class EinsatzAlarm {

	/**
	 * 
	 */
	private static Logger logger = Logger.getLogger(EinsatzAlarm.class);

	public static final String ANRUFEN = "Anrufen";

	public static final String BRANDEINSATZ = "Brandeinsatz";

	public static final String GEFAHRGUTEINSATZ = "Gefahrguteinsatz";

	public static final String RETTUNGSEINSATZ = "Rettungseinsatz";

	public static final String PERSONENRETTUNG = "Personenrettung";

	public static final String BMA = "Entstehungsbrand/BMA";

	public static final String HILFELEISTUNG = "Hilfeleistung";
	
	public static final String LEITSTELLEMELDEN = "Leitstelle anrufen";

	public static final String PROBEALARM = "Probealarm";

	public static final String EINSATZ5TON = "Einsatz 5Ton";

	public static final String POCSAG = "Einsatz Pocsag";

	public int feuerwehrID = -1;

	private String feuerwehrName = "";

	private String mode = "";

	private String status = "";

	private String fmsSchleife = "";

	private String schleife5Ton = "";

	private String ric = "";

	private String pocsagtext = "";

	private boolean istFMSFeuerwehr = false;

	private boolean ist5TonFeuerwehr = false;

	private boolean istPocsagFeuerwehr = false;

	private long alarmTime;
	
	private boolean writenToDB = false;

	public EinsatzAlarm(String[] inputInfo) {

		logger.debug("parseAlarm");

		this.mode = inputInfo[0];

		if (inputInfo[0].equals("fms")) {
			this.status = inputInfo[1];
			this.fmsSchleife = inputInfo[2];
			this.feuerwehrID = SQL.getFeuerwehrIdByAlarmValue(fmsSchleife);
		} else if (inputInfo[0].equals("5ton")) {
			this.schleife5Ton = inputInfo[1];
			this.feuerwehrID = SQL.getFeuerwehrIdByAlarmValue(schleife5Ton);
		} else if (inputInfo[0].equals("pocsag")) {
			this.ric = inputInfo[1];
			this.pocsagtext = inputInfo[3];
			this.feuerwehrID = SQL.getFeuerwehrIdByAlarmValue(ric);
		} else {
			logger.debug("Unbekanntesinputformat");
		}

		this.feuerwehrName = SQL.getFeuerwehrNameByID(this.feuerwehrID);
		this.alarmTime = System.currentTimeMillis();
		this.istFMSFeuerwehr = SQL.getIstFMSFeuerwehrByID(this.feuerwehrID);
		this.istPocsagFeuerwehr = SQL.getIstPocsagFeuerwehrByID(this.feuerwehrID);
		this.ist5TonFeuerwehr = SQL.getIst5TonFeuerwehrByID(this.feuerwehrID);
		
		for (String s : inputInfo) {
			System.out.print(s + " ");
		}
		System.out.println();
	}

	@Override
	public String toString() {

		StringBuilder builder = new StringBuilder();
		builder.append(getEinsatzArt());
		builder.append("  ");
		builder.append(feuerwehrName);
		builder.append("  ");
		DateFormat dfmt2 = new SimpleDateFormat("dd.MM.yy HH:mm:ss");
		builder.append(dfmt2.format(alarmTime));
		return builder.toString();
	}

	public boolean is5Ton() {

		return mode.equals("5ton");
	}

	public boolean isPocsag() {

		return mode.equals("pocsag");
	}

	public boolean isFMS() {

		return mode.equals("fms");
	}

	public String getRicText() {

		return pocsagtext;
	}

	/**
	 * 
	 * @return
	 */
	public String getStatus() {

		return status;
	}

	/**
	 * @return the einsatzArt
	 */
	public String getEinsatzArt() {

		// Rettungsdienst
		if (fmsSchleife.startsWith("95")) {
			return RETTUNGSEINSATZ;
		}
		
		if (isPocsag()) {
			return POCSAG;
		}

		if (is5Ton()) {
			return EINSATZ5TON;
		}
		
		// Feuerwehr
		if (status.equals("1")) {
			return ANRUFEN;
		} else if (status.equals("2")) {
			return BMA;
		} else if (status.equals("3")) {
			return GEFAHRGUTEINSATZ;
		} else if (status.equals("4")) {
			return BRANDEINSATZ;
		} else if (status.equals("5")) {
			return HILFELEISTUNG;
		} else if (status.equals("6")) {
			return PROBEALARM;
		} else if (status.equals("7")) {
			return LEITSTELLEMELDEN;
		} else if (status.equals("8")) {
			return PERSONENRETTUNG;
		} else {
			return status;
		}
	}

	/**
	 * @return the mode
	 */
	public String getMode() {

		return mode;
	}

	public String getAlarmKennung() {

		if (is5Ton()) {
			return getSchleife5Ton();
		} else if (isPocsag()) {
			return getRic();
		} else if (isFMS()) {
			return getSchleife();
		}
		return "Alarmkennung";
	}

	public String getType() {

		if (is5Ton()) {

			return "5ton";
		} else if (isPocsag()) {

			return "pocsag";
		} else if (isFMS()) {

			return "fms";
		}
		return "Type";
	}

	/**
	 * @return the fmsSchleife
	 */
	public String getSchleife() {

		return fmsSchleife;
	}

	/**
	 * @return the schleife5Ton
	 */
	public String getSchleife5Ton() {

		return schleife5Ton;
	}

	public String getRic() {

		return ric;
	}

	/**
	 * @return
	 */
	public String getBlockIdentifier() {

		if(feuerwehrID == -1) {
			return ric + schleife5Ton + fmsSchleife;
		}
		
		return feuerwehrID + "";
	}

	/**
	 * @return the alarmTime
	 */
	public long getAlarmTime() {

		return alarmTime;
	}

	public int getFeuerwehrID() {

		return feuerwehrID;
	}

	private static boolean isProbeAlarm(long timestamp) {

		DateFormat dfmt = new SimpleDateFormat("E");
		String tag = dfmt.format(new Date(timestamp)); // Sa
		if (tag.equals("Sa")) {
			DateFormat dfmt2 = new SimpleDateFormat("hh"); // "E.', den' dd.MM.yy 'um' hh:mm:ss"
			int stunde = Integer.parseInt(dfmt2.format(new Date(timestamp)));// Mi.,
																				// den
																				// 21.03.07
																				// um
																				// 09:14:20
			DateFormat dfmt3 = new SimpleDateFormat("mm");
			int minute = Integer.parseInt(dfmt3.format(new Date(timestamp)));
			if (stunde == 12) {
				if (minute > 0 && minute <= 5) {
					return true;
				}
			}
		}
		return false;
	}

	public boolean isProbeAlarm() {

		return (is5Ton() && isProbeAlarm(alarmTime)) || fmsSchleife.equals("00-00");
	}

	public boolean istFMSFeuerwehr() {
		return istFMSFeuerwehr;
	}

	public boolean ist5TonFeuerwehr() {
		return ist5TonFeuerwehr;
	}

	public boolean istPocsagFeuerwehr() {

		return istPocsagFeuerwehr;
	}

	public boolean isWritenToDB() {
		return writenToDB;
	}

	public void setWritenToDB(boolean writenToDB) {
		this.writenToDB = writenToDB;
	}

	public static void main(String[] args) {

		long timestamp = 1309878675000l;
		DateFormat dfmt2 = new SimpleDateFormat("E.', den' dd.MM.yy 'um' hh:mm:ss"); // "E.', den' dd.MM.yy 'um' hh:mm:ss"
		System.out.println(dfmt2.format(new Date(timestamp)));// Mi., den
																// 21.03.07 um
																// 09:14:20
		// System.out.println(isProbeAlarm(timestamp));
	}
}
